package com.example.homeworktagger.controller;

import com.example.homeworktagger.service.CsvImportService;
import com.example.homeworktagger.service.DataImportService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.util.HashMap;
import java.util.Map;

/**
 * CSV导入控制器
 * 
 * 处理数据导入相关的请求，包括：
 * - CSV文件上传和导入
 * - 创建Milvus集合
 * - 导入页面的显示
 */
@Slf4j
@Controller
@RequestMapping("/import")
@RequiredArgsConstructor
public class CsvImportController {

    /** CSV导入服务 */
    private final CsvImportService csvImportService;
    
    /** 数据导入服务 */
    private final DataImportService dataImportService;

    /**
     * 显示导入页面
     * 
     * @return 视图名称
     */
    @GetMapping
    public String importPage() {
        return "import";
    }

    /**
     * 处理CSV文件上传和导入
     * 
     * @param file 上传的CSV文件
     * @param redirectAttributes 重定向属性
     * @return 重定向到导入页面
     */
    @PostMapping("/csv")
    public String importCsv(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {
        log.info("接收到CSV文件上传请求: {}", file.getOriginalFilename());
        
        if (file.isEmpty()) {
            redirectAttributes.addFlashAttribute("message", "请选择要上传的文件");
            return "redirect:/import";
        }

        if (!file.getOriginalFilename().endsWith(".csv")) {
            redirectAttributes.addFlashAttribute("message", "只支持CSV格式的文件");
            return "redirect:/import";
        }

        try {
            csvImportService.importCsvFile(file);
            redirectAttributes.addFlashAttribute("message", "文件导入成功");
            log.info("CSV文件导入成功");
        } catch (Exception e) {
            log.error("CSV文件导入失败", e);
            redirectAttributes.addFlashAttribute("message", "文件导入失败: " + e.getMessage());
        }
        
        return "redirect:/import";
    }

    /**
     * 创建Milvus集合
     * 
     * @return 操作结果
     */
    @PostMapping("/create-collection")
    @ResponseBody
    public Map<String, String> createCollection() {
        Map<String, String> response = new HashMap<>();
        try {
            log.info("正在创建集合...");
            dataImportService.createCollection();
            response.put("message", "集合创建成功");
            log.info("集合创建成功");
        } catch (Exception e) {
            log.error("集合创建失败", e);
            response.put("message", "集合创建失败: " + e.getMessage());
        }
        return response;
    }
} 